繼前幾天稍微介紹Deeplabe、講了我看了tensorflow的程式碼的心得、以及用到API去更具體地描述訓練流程後,接下來就是到了實際來看程式的環節了。
讓我們開始吧。
21-32行是import。比較特別的是它的import方式是把deeplab看作已經輸出成一個module的方式去import的,所以28-29會出現from deeplab import *
的方式,而from deployment import *
也是,這個是在tensorflow/research/slim底下的一塊子程式碼,我目前也還沒有去看懂這個部分。
接著是縮短slim、還有管理參數會用到的flags。
接著從第38-218行就是所有會用到的參數。看起來很多可是一開始一個人單機作業的時候,其實可以把一些參數給忽略,而且他每段都有註明參數是for什麼用途的。
像上面這一段的參數,如果只用一個gpu去做訓練的話,根本不需要處理,想要了解這部分的知識的話,去修個平行處理,然後可以用c語言的一個mpi.h去做練習。
接著logging這段是用來決定如何儲存訓練的模型與位置的,要留。
這個部分是開始分析程式的效能會用到的資料,也就是說會開始去分析我的程式是不是會有哪一個節點的速度比較慢,導致拖慢了整體模型的運行速度,這個一開始可以不需要。
接下來都是跟模型的學習速率與方法的參數,要留。
這個部分的參數我還沒有使用到,應該可以不需要留。
這個project甚至整合了NAS,neural architecture search的知識,有興趣的可以再看看這方面的研究,只是這部分的研究好像還在找更高效率的解法,或是必須得等硬體再次突破才能夠開花結果。
接著這段的參數是for fine-tuning的步驟,基本上要開始fine-tuning,會需要pretrained過的模型參數,然後會去限制只剩最後一層神經層的參數是trainable,其他的參數會被設定為not trainable。並且會去調整整個學習的learning rate。
這個參數是deeplab的程式的發表重點,atrous rate
,目前有些backbone像xception_65
會有限定的atrous rate
與output_stride
的搭配,而mobilenet_v2
則好像沒有支援(?)
這個部分對於訓練其實蠻有幫助的,是一種優先針對困難的訓練樣本進行模型參數更新的方式,top_k
就是在前k個(或k percent)的pixel,去做模型參數更新。有興趣的去看tensorflow的doc,官方有實作這個method。
這個部分是讓模型開始可以去針對實際應用,進一步得加快他的效能的用途,所以一開始研究可以不理他,但如果要往業界走,這個部分應該要好好了解才對。
接下來是有關dataset的參數,這部分的參數取決於你的data是如何儲存與管理的,最簡單的方式是放入已經存好的tfrecord的檔案路徑之類的。
參數的部分一講完,其實已經可以大概想到下面的程式碼會有包含哪些用途,接下來要做的其實就是看看最後提交的程式碼,是以怎樣的邏輯撰寫程式的。
那這部分我不一定會講,看情況囉!
我們下次見~